import router from '@/router'
import store from '@/store'

router.beforeEach(async(to, from, next) => {
  const token = store.getters.token
  const url = to.path
  const whiteList = ['/login', '/404']
  // 有 token 去登陆页 => 首页
  if (token && url === '/login') {
    next('/')
  }

  // 有 token 不去登录页 => 放行
  if (token && url !== '/login') {
    if (!store.state.user.userInfo.userId) {
      await store.dispatch('user/getUserInfo')
      // 调用路由的筛选
      const routes = await store.dispatch(
        'permission/filterRoutes',
        store.state.user.userInfo.roles.menus
      )
      // router 有一个方法, 可以追加路由配置 router.addRoutes(配置数组)
      router.addRoutes([
        ...routes,
        { path: '*', redirect: '/404', hidden: true }
      ])

      next(to.path)
      return
    }
    next()
  }

  // 无 token 在白名单 => 放行
  if (!token && whiteList.includes(url)) {
    next()
  }

  // 无 token 不在白名单 => 登录页
  if (!token && !whiteList.includes(url)) {
    next('/login')
  }

  // if (store.getters.token) {
  //   // 有 token 去登录页 => 首页
  //   if (to.path === '/login') {
  //     next('/')
  //   } else {
  //     // 有 token 不是去登录页 => 放行
  //     next()
  //   }
  // } else {
  //   const whiteList = ['/login', '/404']
  //   if (whiteList.includes(to.path)) {
  //   // if (whiteList.indexOf(to.path) !== -1) {
  //     // 没 token 允许不登录就查看的, 放行
  //     next()
  //   } else {
  //     // 没 token 其他页面,跳转登录页
  //     next('/login')
  //   }
  // }
})
